﻿using System;
using System.Web;
using System.Data;
using SharedLibraries;
using SharedLibraries.Constants;
using EntityObject;
using DataAccessObject;
using ThangNM_LIB.FUNC;
using ThangNM_LIB.DB;
using ThangNM_LIB.EO;

namespace ThangNM.Account
{
    public partial class LostPassword : System.Web.UI.Page
    {
        public Int16 iType
        {
            get { return (Int16)ViewState["iType"]; }
            set { ViewState["iType"] = value; }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                MsgUC1.setClearMsg();
                if (Request.QueryString[QueryString.token] == null)
                {
                    iType = 1;
                    pnlReceiveMail.Visible = false;
                    pnlSentMail.Visible = true;
                    ltlTitle.Text = "Yêu cầu lấy lại mật khẩu";
                    btnResetPassword.Text = "Gửi mật khẩu mới vào email đăng ký";
                }
                else
                {
                    iType = 2;
                    pnlReceiveMail.Visible = true;
                    pnlSentMail.Visible = false;
                    ltlTitle.Text = "Nhập mật khẩu mới";
                    btnResetPassword.Text = "Đồng ý";
                }
            }
            catch (Exception ex)
            {
                MsgUC1.setNotifications(ConstEx.FunctionSetMsg.ERROR, ex.Message, ex.ToString());
            }
        }

        public DataSet Check(Int16 iType)
        {
            DataSet dsOutput = null;
            try
            {
                AccountEO _AccountEO = new AccountEO();
                _AccountEO.sUsername = txtsUsernamesEmail.Text;
                _AccountEO.sPassword = Security.EnCrypt(txtsPassword.Text.Trim());
                _AccountEO.iPermission = iType;
                _AccountEO.bStatus = true;
                dsOutput = (new ShareDAO.UserDAO()).Login(_AccountEO);
            }
            catch (Exception ex)
            {
                MsgUC1.setNotifications(ConstEx.FunctionSetMsg.ERROR, ex.Message, ex.ToString());
            }
            return dsOutput;
        }

        protected void btnResetPassword_Click(object sender, EventArgs e)
        {
            try
            {
                LoginEO _LoginEO;
                switch (iType)
                {
                    case 1:
                        if (CheckInput1())
                        {
                            _LoginEO = new LoginEO();
                            if (!CommonsCheck.ValidateObject(txtsUsernamesEmail.Text, 11))
                            {
                                if ((new ShareDAO.UserDAO()).CheckExists(StringEx.Trim(txtsUsernamesEmail.Text).ToLower(), 2))
                                {
                                    _LoginEO.PK_iAccountID = 2;
                                    _LoginEO.sUsername = StringEx.Trim(txtsUsernamesEmail.Text).ToLower();
                                    _LoginEO.sIP = "http://nguyenmanhthang.net";
                                    _LoginEO.tCookiesExpires = DateTime.Now.AddDays(3);
                                }
                            }
                            else
                            {
                                if ((new ShareDAO.UserDAO()).CheckExists(StringEx.Trim(txtsUsernamesEmail.Text).ToLower(), 3))
                                {
                                    _LoginEO.PK_iAccountID = 3;
                                    _LoginEO.sUsername = StringEx.Trim(txtsUsernamesEmail.Text).ToLower();
                                    _LoginEO.sIP = "http://nguyenmanhthang.net";
                                    _LoginEO.tCookiesExpires = DateTime.Now.AddDays(3);
                                }
                            }
                            if (_LoginEO.PK_iAccountID != 0)
                            {
                                //token = Security.Login.Encrypt(CookiesValue, System.Configuration.ConfigurationManager.AppSettings["FACEBOOK"]);
                                //token = HttpUtility.UrlEncode(token);

                                //string body = "Bạn vừa yêu cầu lấy lại mật khẩu? <BR \\>" +
                                //"Nếu đúng hãy click vào đường link này: " +
                                //"<a href=\"http://nguyenmanhthang.net/Account/LostPassword.aspx?token=" + Commons.getToken(new TokenEO(Token_iType_C.ResetPassword, DateTime.Now.AddHours(3), _LoginEO)) + "\" >Click vào đây để tạo mật khẩu mới</a><BR \\>" +
                                //"Nếu không phải bạn hãy bỏ qua thư này.";
                                //if (Commons.SendMail("Nguyễn Mạnh Thắng", System.Configuration.ConfigurationManager.AppSettings["EMAIL"], _AccountEO.sEmail, "Yêu cầu lấy lại mật khẩu", body)) 
                                //    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.SUCCESS, "Đường link để reset mật khẩu đã được gửi vào email [" + _AccountEO.sEmail +
                                //        "] mà bạn đã đăng ký. Vui lòng check mail và đổi mật khẩu trước ngày " + DateTime.Now.AddDays(3).ToString(FormatEx.Date_Time.Format_DateTime_WebView));
                                //else
                                //    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, "Reset password không thành công.");

                            }
                            else
                                MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, "Không tìm thấy tài khoản có tên đăng nhập hoặc email ["+txtsUsernamesEmail.Text+"]");
                        }
                        break;
                    case 2:
                        if (CheckInput2())
                        {
                            _LoginEO = new LoginEO();
                            _LoginEO = (LoginEO)JsonEx.Json2Object(Security.Login.Decrypt(Request.QueryString[QueryString.token], System.Configuration.ConfigurationManager.AppSettings["FACEBOOK"]), _LoginEO.GetType());
                            if (_LoginEO.tCookiesExpires > DateTime.Now)
                            {
                                AccountEO _AccountEO = new AccountEO();
                                _AccountEO.PK_iAccountID = _LoginEO.PK_iAccountID;
                                _AccountEO.sPassword = Security.EnCrypt(txtsPassword.Text);
                            //    if (ShareDAO.UserDAO.Update(_AccountEO, new SEOEO(), 2))
                            //    {
                            //        //Response.Cookies["secret"].Expires = DateTime.Now.AddDays(1);
                            //        _LoginEO.sIP = Request.ServerVariables["remote_addr"].ToString();
                            //        _LoginEO.tCookiesExpires = DateTime.Now.AddDays(1);
                            //        string CookiesValue = Commons.Object2Json(_LoginEO);
                            //        Session["secret"] = Security.Login.Encrypt(CookiesValue, Security.Base64Encode(Request.ServerVariables["remote_addr"]));
                            //        Response.Redirect("~/Admin/ProfileUI.aspx");
                            //    }
                            //    else
                            //        MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, "Reset password không thành công.");
                            }
                            else
                            {
                                MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, "Yêu cầu lấy lại mật khẩu đã hết hạn. Vui lòng gửi yêu cầu khác.");
                            }
                        }
                        break;
                }
            }
            catch (Exception ex)
            {
                MsgUC1.setNotifications(ConstEx.FunctionSetMsg.ERROR, ex.Message, ex.ToString());
            }
        }

        protected bool CheckInput1()
        {
            string strNull = "";
            if (string.IsNullOrEmpty(txtsUsernamesEmail.Text) == true)
            {
                strNull += ", Tên đăng nhập hoặc email";
                txtsUsernamesEmail.Focus();
            }
            if (String.IsNullOrEmpty(strNull))
            {
                if (!CaptchaUC1.CheckValidCaptcha())
                {
                    CaptchaUC1.ReCaptcha();
                    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, MessagesEx.Captcha_Khong_Chinh_Xac);
                    return false;
                }
                return true;
            }
            else
            {
                MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, MessagesEx.CAC_TRUONG_BAT_BUOC_PHAI_NHAP + strNull.Substring(2).Replace(":", ""));
                return false;
            }
        }

        protected bool CheckInput2()
        {
            string strNull = "";
            if (string.IsNullOrEmpty(txtsPassword.Text) == true)
            {
                strNull += ", Mật khẩu";
                txtsPassword.Focus();
            }
            if (string.IsNullOrEmpty(txtsPassword1.Text) == true)
            {
                strNull += ", Nhập lại mật khẩu";
                txtsPassword1.Focus();
            }

            if (String.IsNullOrEmpty(strNull))
            {
                if (!string.IsNullOrEmpty(txtsPassword.Text) && !string.IsNullOrEmpty(txtsPassword1.Text) && !txtsPassword.Text.Equals(txtsPassword1.Text))
                {
                    txtsPassword.Focus();
                    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, MessagesEx.Mat_Khau_Nhap_Lai_Khong_Trung_Khop);
                    return false;
                }
                if (!CommonsCheck.PasswordOk(txtsPassword.Text))
                {
                    txtsPassword.Focus();
                    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, MessagesEx.Mat_Khau_Khong_Du_Manh);
                    return false;
                }

                if (!CaptchaUC1.CheckValidCaptcha())
                {
                    CaptchaUC1.ReCaptcha();
                    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, MessagesEx.Captcha_Khong_Chinh_Xac);
                    return false;
                }
                return true;
            }
            else
            {
                MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, MessagesEx.CAC_TRUONG_BAT_BUOC_PHAI_NHAP + strNull.Substring(2).Replace(":", ""));
                return false;
            }
        }
    }
}